package com.bdqn.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bdqn.pojo.SysRole;
import com.bdqn.pojo.SysUser;
import com.bdqn.service.IRoleService;
import com.bdqn.service.SysUserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/user")
public class UserController {
    @Resource
    private SysUserService sysUserService;
    @Resource
    private IRoleService roleService;

//    @GetMapping("/list")
//    public String list(String userName,Long roleId){
//        Page page = new Page(1,5);
//        sysUserService.getPage(page,userName,roleId);
//        return "user/list";
//    }


    /**
     * 根据用户 ID 获取用户信息
     *
     * @param usrId 用户 ID
     * @return 用户实体
     */
    @GetMapping("/getUser")
    public SysUser getUser(Integer usrId) {
        SysUser user = sysUserService.getUserById(usrId);
        return user;
    }

    /**
     * 获取所有用户列表
     *
     * @return 用户列表
     */
    @GetMapping("/Users")
    public List<SysUser> getUsers() {
        return sysUserService.findAllUsers();
    }

    /**
     * 根据用户 ID 获取用户信息
     *
     * @param id 用户 ID
     * @return 用户实体
     */
    @GetMapping("user/{id}")
    public SysUser getUserById(@PathVariable Integer id) {
        return sysUserService.getUserById(id);
    }

    /**
     * 进入添加用户页面
     *
     * @param model 数据模型
     * @return 添加用户页面视图名称
     */
    @GetMapping("/add")
    public String addUser(Model model) {
        // 获取所有角色列表
        List<SysRole> roles = roleService.list();
        // 将角色列表添加到模型中，以便在页面中展示
        model.addAttribute("roles", roles);
        return "/user/add";
    }

    /**
     * 保存用户信息
     *
     * @param user 用户实体
     * @return 重定向到用户列表页面或继续停留在添加用户页面
     */
    @PostMapping("/save")
    public String saveUser(SysUser user) {
        int i = sysUserService.saveUser(user);
        if (i > 0) {
            return "redirect:/user/list";
        }
        return "/user/add";
    }

    /**
     * 检查用户名是否可用
     *
     * @param usrName 用户名
     * @return "false"表示用户名不可用，"true"表示用户名可用
     */
    @GetMapping("/check")
    @ResponseBody
    public String checkUser(String usrName) {
        if (usrName!= null &&!"".equals(usrName)) {
            return "false";
        }
        List<SysUser> list = sysUserService.list(new QueryWrapper<SysUser>().eq("usr_name", usrName));
        if (list.size() > 0) {
            return "false";
        } else {
            return "true";
        }
    }

    /**
     * 进入编辑用户页面
     *
     * @param model  数据模型
     * @param usrId 用户 ID
     * @return 编辑用户页面视图名称
     */
    @GetMapping("/edit")
    public String updateUser(Model model, Long usrId) {
        // 获取所有角色列表
        List<SysRole> roles = roleService.list();
        // 根据用户 ID 获取用户信息
        SysUser user = sysUserService.getUserById(Math.toIntExact(usrId));
        // 将角色列表和用户信息添加到模型中，以便在页面中展示
        model.addAttribute("roles", roles);
        model.addAttribute("user", user);
        return "/user/edit";
    }

    /**
     * 编辑用户信息
     *
     * @param user 用户实体
     * @return 重定向到用户列表页面或继续停留在编辑用户页面
     */
    @PostMapping("/edit")
    public String editUser(SysUser user) {
        int i = sysUserService.saveUser(user);
        if (i > 0) {
            return "redirect:/user/list";
        }
        return "/user/edit";
    }

    /**
     * 删除用户
     *
     * @param id 用户 ID
     * @return "false"表示删除失败，"true"表示删除成功
     */
    @PostMapping("/del/{id}")
    @ResponseBody
    public String deleteUser(@PathVariable Integer id) {
        if (id == null || id == 0) {
            return "false";
        }
        int count = sysUserService.deleteUser(id);
        if (count == 0) {
            return "false";
        } else {
            return "true";
        }
    }

    /**
     * 用户列表页面
     *
     * @param model    数据模型
     * @param roleId   角色 ID
     * @param usrName  用户名
     * @param pageIndex 页码
     * @return 用户列表页面视图名称
     */
//    @RequestMapping("/list")
//    public String list(Model model,Integer roleId,String usrName,@RequestParam(defaultValue = "1") Integer pageIndex){
//        List<SysRole> roles=roleService.list();
//
//        QueryWrapper<SysUser> qw=new QueryWrapper<>();
//        if(usrName!=null && !"".equals(usrName)){
//            qw.like("usr_name",usrName);
//        }
//        Page<SysUser> userPage= new Page<>(pageIndex, Constants.USER_PAGE_SIZE);
//        IPage<SysUser> userPager = sysUserService.page(userPage, qw);
//        userPager.setRecords(sysUserService.selectUsersPage(roleId, usrName, (pageIndex-1)*Constants.USER_PAGE_SIZE, Constants.USER_PAGE_SIZE));
//        model.addAttribute("roleId",roleId);
//        model.addAttribute("usrName",usrName);
//        model.addAttribute("roles",roles);
//        model.addAttribute("userPager",userPager);
//        return "user/list";
//    }

}
